package core;

import static org.junit.Assert.*;

import org.junit.Test;

public class BinarySearchTest {
	
	@Test
	public final void testSearch() {
		
		assertEquals(-1, BinarySearch.search(new int[]{}, 1));
		assertEquals(-1, BinarySearch.search(new int[]{1,2,3,4,4,4,4,4,5,6}, 8));
		assertEquals(-1, BinarySearch.search(new int[]{1,2,3,4,4,4,4,4,5,6}, 0));
		assertEquals(3, BinarySearch.search(new int[]{1,1,1,1,1,1,1,1}, 1));
		
		assertEquals(4, BinarySearch.search(new int[]{1,2,3,4,4,4,4,4,5,6}, 4));
		assertEquals(2, BinarySearch.search(new int[]{1,2,3,4,4,4,4,4,5,6}, 3));
		assertEquals(9, BinarySearch.search(new int[]{1,2,3,4,4,4,4,4,5,6}, 6));
	}

	
	@Test
	public final void testFindFirst() {
		
		assertEquals(-1, BinarySearch.findFirst(new int[]{}, 1));
		assertEquals(-1, BinarySearch.findFirst(new int[]{1,2,3,4,4,4,4,4,5,6}, 8));
		assertEquals(-1, BinarySearch.findFirst(new int[]{1,2,3,4,4,4,4,4,5,6}, 0));
		assertEquals(0, BinarySearch.findFirst(new int[]{1,1,1,1,1,1,1,1}, 1));
		
		assertEquals(3, BinarySearch.findFirst(new int[]{1,2,3,4,4,4,4,4,5,6}, 4));
		assertEquals(2, BinarySearch.findFirst(new int[]{1,2,3,4,4,4,4,4,5,6}, 3));
		assertEquals(9, BinarySearch.findFirst(new int[]{1,2,3,4,4,4,4,4,5,6}, 6));
	}

	@Test
	public final void testFindLast() {
		
		assertEquals(-1, BinarySearch.findLast(new int[]{}, 1));
		assertEquals(-1, BinarySearch.findLast(new int[]{1,2,3,4,4,4,4,4,5,6}, 8));
		assertEquals(-1, BinarySearch.findLast(new int[]{1,2,3,4,4,4,4,4,5,6}, 0));
		assertEquals(7, BinarySearch.findLast(new int[]{1,1,1,1,1,1,1,1}, 1));
		
		assertEquals(7, BinarySearch.findLast(new int[]{1,2,3,4,4,4,4,4,5,6}, 4));
		assertEquals(2, BinarySearch.findLast(new int[]{1,2,3,4,4,4,4,4,5,6}, 3));
		assertEquals(9, BinarySearch.findLast(new int[]{1,2,3,4,4,4,4,4,5,6}, 6));
	}
}
